<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8">
		<title>Document</title>
	</head>
	<body>
		
	</body>
</html>
<script>
	// 如何在大的作用域中访问小的作用域中的变量?
	// var a;
	// var add = null;
	// function f() {
	// 	var n = 5;
	// 	// console.log(n);

	// 	add = function () {
	// 		n++;
	// 	};

	// 	function say() {
	// 		alert(n++);
	// 	}
	// 	// a = 5;
	// 	return say;
	// }
	// f();
	// f();
	// f();
	// f();
	// console.log(a);

	// var func = f();
	// console.log(add);

	// add();
	// console.log(func());
	// add();
	// add();
	// console.log(func());
	// func();
	// func();
	// func();
	// func = null;
	// func = f();
	// func();
	// func();


	function f1() {
		var n = 10;
		function f2() {
			n++;
			alert(n);
		}
		return f2;
	}
	var func = f1();
	func();
	func();
	func();

	// 闭包: 可以访问函数局部变量(私有变量), 是函数内部与函数外部沟通的桥梁
	// 闭包需要满足两个条件: 包含了函数内部的变量, 并且被外部变量所引用
	// 官方解释: 闭包是包含了很多变量和绑定了这些变量的环境的表达式(通常指函数) 

	// 闭包的使用会造成内存使用过多, 释放不掉, 使用闭包的时候需要注意内存问题, 闭包使用完毕, 及时释放(让引用闭包的变量 = null)







</script>